<?php
/**
 * Description of MediaProdutoDAO
 *
 * @author Magno
 */
class MediaProdutoDAO {

    private $conexao;
    public function __construct() {
        $this->conexao = Conexao::getConexao();
    }

    public function salvar($mediaProduto) {

        try {
            
            if($mediaProduto->getMediaProdutoID() != null && $mediaProduto->getMediaProdutoID() > 0) {
                $statment = $this->conexao->prepare("UPDATE mediaProduto SET
                        caminho = :caminho,
                        produtoID = :produtoID
                        WHERE mediaProdutoID = :mediaProdutoID");

            }else {
                $statment = $this->conexao->prepare("INSERT INTO mediaProduto(mediaProdutoID,caminho,produtoID) VALUES (:mediaProdutoID,:caminho,:produtoID);");
            }

            if($statment->execute($mediaProduto->toBD())) {

                if($mediaProduto->getMediaProdutoID() == null || $mediaProduto->getMediaProdutoID() <= 0)
                    $mediaProduto->setMediaProdutoID($this->conexao->lastInsertId());
                return $mediaProduto;

            }else {
                $erros = $statment->errorInfo();
                throw new Exception("Erro MediaProdutoDAO: ".$erros[2]);
            }

        }catch(PDOException $err) {
            throw new Exception("Erro MediaProdutoDAO:".$err->getMessage());
        }

    }

    public function excluir($mediaProdutoID) {

        try {

            $statment = $this->conexao->prepare("DELETE FROM mediaProduto WHERE mediaProdutoID = :mediaProdutoID");
            $statment->bindParam(':mediaProdutoID',$mediaProdutoID);

            if(!$statment->execute()) {
                $erros = $statment->errorInfo();
                throw new Exception("Erro MediaProdutoDAO: ".$erros[2]);
            }

        }catch(PDOException $err) {
            throw new Exception("Erro MediaProdutoDAO:".$err->getMessage());
        }

    }

    public function listar($pagina = 0,$caminho = "", $produtoID = 0, $carregarDependencias = false) {
        try {

            $produtoDAO = new ProdutoDAO();

            $limite = Util::getPaginacao($pagina);
            $where = $this->getWhere($caminho,$produtoID);
            $mediaProdutos = array();
            $statment = $this->conexao->query( "SELECT * FROM mediaProduto c $where $limite" );

            foreach ( $statment->fetchAll(PDO::FETCH_SERIALIZE) as $row ) {
                $mediaProduto = new MediaProdutoBean($row['mediaProdutoID'], $row['caminho']);
                if($carregarDependencias)
                    $mediaProduto->setProduto($produtoDAO->buscarPorID($row['produtoID']));
                $mediaProdutos[] = $mediaProduto;
            }

            return $mediaProdutos;

        }catch(PDOException $err) {
            throw new Exception("Erro MediaProdutoDAO:".$err->getMessage());
        }
    }

    public function buscarPorID($mediaProdutoID, $carregarDependencias = false) {
        try {
            $produtoDAO = new ProdutoDAO();
            $row = $this->conexao->query("SELECT * FROM mediaProduto WHERE mediaProdutoID = $mediaProdutoID ")->fetch(PDO::FETCH_SERIALIZE);

            if(isset($row['mediaProdutoID']) && $row['mediaProdutoID'] > 0) {
                $mediaProduto = new MediaProdutoBean($row['mediaProdutoID'], $row['caminho']);
                if($carregarDependencias)
                    $mediaProduto->setProduto($produtoDAO->buscarPorID($row['produtoID']));
                return $mediaProduto;
            }else {
                return null;
            }


        }catch(PDOException $err) {
            throw new Exception("Erro MediaProdutoDAO:".$err->getMessage());
        }
    }

    private function getWhere($caminho="",$produtoID = 0) {
        $where = " WHERE 1 = 1 ";

        if (isset ($caminho) && strlen($caminho) > 0) {
            $where = $where." AND c.caminho = '$caminho' ";
        }

        if (isset ($produtoID) && $produtoID > 0) {
            $where = $where." AND c.produtoID = $produtoID ";
        }

        return $where;
    }

    public function total($caminho = "",$produtoID = 0) {
        try {

            $where = $this->getWhere($caminho);
            $total = $this->conexao->query( "SELECT COUNT(c.mediaProdutoID) total FROM mediaProduto c $where" )->fetch(PDO::FETCH_COLUMN);
            return $total;

        }catch(PDOException $err) {
            throw new Exception("Erro MediaProdutoDAO:".$err->getMessage());
        }
    }

}
?>
